#include <iostream>
#include <string>
#include "curl/curl.h"
#include <cstdlib>
#include <fstream>
#include <sstream>

using namespace std;

//PARAMETROS DE LA APLICACION
const int CODIGO_PELICULA_INICIAL = 20001;
const int CANTIDAD_PELICULAS = 10;
const char PATH_ARCHIVO_SALIDA [] = "/home/fede/workspace1/archivo.txt"; //PONER EL PATH



// Buffer para almacenar errores
static char errorBuffer[CURL_ERROR_SIZE];

// Escribir toda la información acá
static string buffer;

// La función de escritura utilizada por curl
static int writer(char *data, size_t size, size_t nmemb,
                  std::string *buffer)
{
  // Lo que vamos a devolver
  int result = 0;

  // ¿Hay algo en el buffer?
  if (buffer != NULL)
  {
    // Agregar la información al buffer
    buffer->append(data, size * nmemb);

    // ¿Cuánto escribimos?
    result = size * nmemb;
  }

  return result;
}

// Filtrar todos los tags XML y quedarse con el nombre de la película solo
string getNombrePelicula(){
	int posTagInicial = buffer.find("<literal>");
	int posTagFinal = buffer.find("</literal>");

	if (posTagInicial!=string::npos){
		char nombre [100];
		int cantidad = posTagFinal - posTagInicial - 9;
		buffer.copy(nombre, cantidad, posTagInicial + 9);
		nombre[cantidad]='\0';
		string resultado(nombre);

		return resultado;
	}
	else {
		return "";
	}
}


/*
int main(int argc, char* argv[])
{
	//Abrir el archivo
	ofstream salida(PATH_ARCHIVO_SALIDA, ios::out);

	if (!salida){
    	  //Falló la apertura
	   	  cerr << "No se puedo abrir el archivo";
	   	  exit(-1);
	}

	for(int i = CODIGO_PELICULA_INICIAL; i <= CODIGO_PELICULA_INICIAL + CANTIDAD_PELICULAS; i++)
	{
           //Dirección para pasar por parámetro en las opciones (no anda con strings). Nota: ESPACIO = %20, NUMERAL = %23
			stringstream out;
			out << i;
			string numero = out.str();

			string principio = "http://www.linkedmdb.org/sparql?query=SELECT%20?movieName%20WHERE%20{?movie%20<http://data.linkedmdb.org/resource/movie/filmid>%20\"";
			string final = "\"^^<http://www.w3.org/2001/XMLSchema%23int>;<http://purl.org/dc/terms/title>%20?movieName.}";
			string url = principio + numero + final;

			// Nuestros objetos curl
			CURL *curl;
		    CURLcode result;

		    // Inicializar curl y obtener el handle
		    curl = curl_easy_init();

		    if (curl)
		    {
			      // Seteo de todas las opciones de curl
			      curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errorBuffer);
			      curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
			      curl_easy_setopt(curl, CURLOPT_HEADER, 0);
			      curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
			      curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
			      curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer);

			      // Intento de obtener la página
			      result = curl_easy_perform(curl);

			      // Realizar el cleanup
			      curl_easy_cleanup(curl);

			      // ¿Fue exitoso?
			      if (result == CURLE_OK)
			      {
			    	salida << "FilmID = " << i << "\n";
			    	string nombrePelicula = getNombrePelicula(); // Saca todos los tags XML y devuelve sólo el nombre
			        salida << nombrePelicula << "\n\n"; //Guarda en el archivo
			        buffer = "";
			      }
			      else
			      {
			        cout << "Error: [" << result << "] - " << errorBuffer;
			        salida.close();
			        exit(-1);
			      }
		    }

		    //Cada 20 películas bajadas, duerme 150 segundos
		   if (i%20 == 0){
			   	cout << "Duerme 150 segundos." << endl;
		    	sleep(150);
		    	cout << " Despierta." << endl;
		    }

	}

	return 0;
}*/
